package 基础.功能;


import java.util.concurrent.*;

/**
 * 线程池创建线程方式
 * <p>
 * 好处:
 * 降低系统资源消耗，通过重用已存在的线程，降低线程的创建和销毁造成的消耗；
 * 提高系统响应速度，当有任务到达时，通过复用已存在线程，无需等待新线程创建便可以立即执行；
 * 方便线程并发数的管理，因为线程如果无限制的创建，可能会导致内存占用过多出现OOM，cpu过度切换也会造成性能降低
 * 提供更强大的功能，延时定时线程池
 * <p>
 * 阿里巴巴不建使用Executors来创建线程
 *
 *
 * 聊一下常见的线程池方法
 * execute :
 * submit :
 * shutdown :
 * ShutDow :
 *
 *
 * @author kangjx
 * @version 1.0
 * @date 2023/7/5 下午8:44
 */
public class ThreadPoolDemo {


    public static void main(String[] args) {


        ThreadPoolExecutor tpe = new ThreadPoolExecutor(3, 6,
                10, TimeUnit.SECONDS, new ArrayBlockingQueue<>(4), r->{
            Thread t1 = new Thread(r);
            t1.setName("thread-factory-01");
            return t1;
        },new ThreadPoolExecutor.AbortPolicy());

        tpe.execute(()->{
            System.out.println("我是线程池里面的一个工作线程");
        });
        RunnableDemo r = new RunnableDemo();
        tpe.execute(r);

        tpe.shutdown();
        //作业调度  task



//        ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue)


//        ThreadFactory threadFactory = new ThreadFactory() {
//            @Override
//            public Thread newThread(Runnable r) {
//                Thread thread = new Thread(r);
////                thread.setName("demo-01");
//                return thread;
//            }
//        };
//        ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(3, 5, 3,
//                TimeUnit.SECONDS, new ArrayBlockingQueue<>(50), threadFactory,new ThreadPoolExecutor.AbortPolicy());
//
//        threadPoolExecutor.execute(() -> {
//            for (int i = 0; i < 100; i++) {
//                System.out.println("ssss" + i + "==>" + Thread.currentThread().getName());
//            }
//        });
//        threadPoolExecutor.submit(new RunnableDemo());
//        threadPoolExecutor.shutdown();
    }

}
